package cn.wjssl.trigger.job.springJob;

import cn.wjssl.domain.activity.model.valobj.ActivitySkuStockKeyVO;
import cn.wjssl.domain.activity.service.IRaffleActivitySkuStockService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

import javax.annotation.Resource;

/**
 * 定时同步Mysql 活动商品SKU库存
 */
@Slf4j
//@Component
public class UpdateActivitySkuStockJob {

    @Resource
    private IRaffleActivitySkuStockService stock;

    // 定时从redis队列中消费sku库存
    @Scheduled(cron = "0/5 * * * * ?")
    public void exec() {
        try {
            //log.info("定时任务，更新活动sku库存【延迟队列获取，降低对数据库的更新频次，不要产生竞争】");
            // 弹出sku的redis队列中的第一个, 用于同步消耗数据库库存
            ActivitySkuStockKeyVO activitySkuStockKeyVO = stock.takeQueueValue();
            // 如果当前没有对象, 就结束任务, 等下一个5秒再看
            if (null == activitySkuStockKeyVO) return;
            log.info("定时任务，更新活动sku库存 sku:{} activityId:{}", activitySkuStockKeyVO.getSku(), activitySkuStockKeyVO.getActivityId());
            // 有的话就更新Mysql中的库存
            stock.updateActivitySkuStock(activitySkuStockKeyVO.getSku());
        } catch (Exception e) {
            log.error("定时任务，更新活动sku库存失败", e);
        }
    }
}
